package com.jay.springboot.starter.annotation;

import com.jay.constant.RpcConstant;
import org.springframework.stereotype.Component;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 服务提供者注解（用于注册服务）
 * 此注解主要用于标识一个类作为RPC服务提供者，它会自动扫描并注册服务到服务列表。
 * 通过此注解，可以指定服务的接口类和版本信息，以便服务消费者可以准确地发现和调用服务。
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface RpcService {

    /**
     * 服务接口类
     * 指定该服务实现的接口类，这是服务注册和发现的关键信息。
     * 默认值为void.class，表示如果没有特别指定，该服务不会自动关联到任何接口。
     */
    Class<?> interfaceClass() default void.class;

    /**
     * 版本
     * 指定服务的版本号，服务消费者需要指定相同版本号才能正确调用服务。
     * 这是为了保证服务的兼容性和稳定性，特别是在多个版本的服务并存的情况下。
     * 默认值为RpcConstant.DEFAULT_SERVICE_VERSION，表示如果没有特别指定，服务将使用默认版本号。
     */
    String serviceVersion() default RpcConstant.DEFAULT_SERVICE_VERSION;
}
